package utils

func SliceInsertAt[T any](slice *[]T, index int, value T) {
	if index < 0 || index > len(*slice) {
		panic("index out of range")
	}

	// 如果切片容量不足，手动扩展容量
	if len(*slice) == cap(*slice) {
		newSlice := make([]T, len(*slice), 2*cap(*slice)+1)
		copy(newSlice, *slice)
		*slice = newSlice
	}

	// 将元素从插入点向后移动
	*slice = (*slice)[:len(*slice)+1]
	copy((*slice)[index+1:], (*slice)[index:])

	// 插入新元素
	(*slice)[index] = value
}
